package code1.string;

import java.util.Arrays;

/**
 * 原题链接：https://leetcode.cn/problems/reverse-string-ii/
 */
public class P541 {

    //每计数至 2k 个字符，就反转这 2k 个字符中的前 k 个字符。
    //如果剩余字符少于 k 个，则将剩余字符全部反转。
    //如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样
    public static String reverseStr(String s, int k) {
        char[] str = s.toCharArray();
        for(int i=0;i<str.length;i+=2*k){
            if(i+k-1>=str.length){
                //剩余字符少于k个，将剩余字符串翻转
                reverse(str,i,s.length()-1);
            }else{
                //剩余字符大于等于k个，翻转前k个字符
                reverse(str,i,i+k-1);
            }
        }
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<str.length;i++){
            sb.append(str[i]);
        }
        return sb.toString();
    }

    public static void reverse(char[] str,int begin,int end){
        for(int i=begin,j=end;i<j;i++,j--){
            str[i]^=str[j];
            str[j]^=str[i];
            str[i]^=str[j];
        }
    }


    public static void main(String[] args) {
        System.out.println(reverseStr("abcdefg", 2));
    }
}
